package busterminal.entity;

import busterminal.entity.service.TripState;
import java.text.ParseException;
import java.util.Date;

/**
 * Интерфейс "Рейс"
 */
public interface Trip extends AbstractEntity {

    /**
     * Получить автобус, который задействован в рейсе
     * @return автобус, который задействован в рейсе
     */
    public Bus getBus();

    /**
     * Установить автобус, который задействован в рейсе
     * @param bus автобус, который задействован в рейсе
     */
    public void setBus(Bus bus);

    /**
     * Получить имя кондуктора
     * @return имя кондуктора
     */
    public String getConductorName();

    /**
     * Установить имя кондуктора
     * @param conductorName имя кондуктора
     */
    public void setConductorName(String conductorName);

    /**
     * Получить имя водителя
     * @return имя водителя
     */
    public String getDriverName();

    /**
     * Установить имя водителя
     * @param driverName имя водителя
     */
    public void setDriverName(String driverName);

    /**
     * Получить маршрут, по которому осуществляется рейс
     * @return маршрут, по которому осуществляется рейс
     */
    public Route getRoute();

    /**
     * Установить маршрут, по которому осуществляется рейс
     * @param route маршрут, по которому осуществляется рейс
     */
    public void setRoute(Route route);

    /**
     * Получить состояние рейса, определяемое константой из {@link TripState}
     * @return состояние рейса, определяемое константой из {@link TripState}
     */
    public TripState getTripState();

    /**
     * Установить состояние рейса, определяемое константой из {@link TripState}
     * @param tripState состояние рейса, определяемое константой из {@link TripState}
     */
    public void setTripState(TripState tripState);

    /**
     * Получить дату осуществления рейса
     * @return дата осуществления рейса
     */
    public Date getTripDate();

    /**
     * Получить дату осуществления рейса
     * @return строка с датой осуществления рейса в формате <code>DD.MM.YYYY</code>
     */
    public String getTripDateString();

    /**
     * Установить дату осуществления рейса
     * @param tripDate дата осуществления рейса
     */
    public void setTripDate(Date tripDate);

    /**
     * Установить дату осуществления рейса
     * @param tripDate строка с датой осуществления рейса в формате <code>DD.MM.YYYY</code>
     */
    public void setTripDate(String tripDate) throws ParseException;
}
